package com.dc.designPattern._11_proxy.extend.extend3;

import java.lang.reflect.InvocationHandler;

/**
 * Description: 动态代理_客户端
 *
 *  动态代理 + 自定义前置，实现代理与实现解耦
 *
 * @author: gdc
 * @date: 2021/6/25
 * @version 1.0
 */
public class Client {

    public static void main(String[] args){
        // step 1 定义一个主题
        Subject subject = new RealSubject();

        // step 2 定义一个Handler
        InvocationHandler handler = new MyInvocationHandler(subject);

        // step 3 定义主题的代理
        Subject proxy = DynamicProxy.newProxyInstance(subject.getClass().getClassLoader(), subject.getClass().getInterfaces(), handler);

        // step 4 代理执行业务
        proxy.doSomeThing();


        // ------------------------ 具体代理类实现逻辑 --------------------------

        Subject proxy2 = SubjectDynamicProxy.newProxyInstance(subject);
        proxy2.doSomeThing();
    }
}
